#pragma once

#include <cassert>

/*
 * Pad definitions
 */
enum {
	/*
	 * PAD_GPIO_* can be used as offsets to access control regsisters in
	 * IOMUXC->SW_MUX_CTL and IOMUXC->SW_PAD_CTL.
	 */
	PAD_GPIO_EMC_00,
	PAD_GPIO_EMC_01,
	PAD_GPIO_EMC_02,
	PAD_GPIO_EMC_03,
	PAD_GPIO_EMC_04,
	PAD_GPIO_EMC_05,
	PAD_GPIO_EMC_06,
	PAD_GPIO_EMC_07,
	PAD_GPIO_EMC_08,
	PAD_GPIO_EMC_09,
	PAD_GPIO_EMC_10,
	PAD_GPIO_EMC_11,
	PAD_GPIO_EMC_12,
	PAD_GPIO_EMC_13,
	PAD_GPIO_EMC_14,
	PAD_GPIO_EMC_15,
	PAD_GPIO_EMC_16,
	PAD_GPIO_EMC_17,
	PAD_GPIO_EMC_18,
	PAD_GPIO_EMC_19,
	PAD_GPIO_EMC_20,
	PAD_GPIO_EMC_21,
	PAD_GPIO_EMC_22,
	PAD_GPIO_EMC_23,
	PAD_GPIO_EMC_24,
	PAD_GPIO_EMC_25,
	PAD_GPIO_EMC_26,
	PAD_GPIO_EMC_27,
	PAD_GPIO_EMC_28,
	PAD_GPIO_EMC_29,
	PAD_GPIO_EMC_30,
	PAD_GPIO_EMC_31,
	PAD_GPIO_EMC_32,
	PAD_GPIO_EMC_33,
	PAD_GPIO_EMC_34,
	PAD_GPIO_EMC_35,
	PAD_GPIO_EMC_36,
	PAD_GPIO_EMC_37,
	PAD_GPIO_EMC_38,
	PAD_GPIO_EMC_39,
	PAD_GPIO_EMC_40,
	PAD_GPIO_EMC_41,
	PAD_GPIO_AD_B0_00,
	PAD_GPIO_AD_B0_01,
	PAD_GPIO_AD_B0_02,
	PAD_GPIO_AD_B0_03,
	PAD_GPIO_AD_B0_04,
	PAD_GPIO_AD_B0_05,
	PAD_GPIO_AD_B0_06,
	PAD_GPIO_AD_B0_07,
	PAD_GPIO_AD_B0_08,
	PAD_GPIO_AD_B0_09,
	PAD_GPIO_AD_B0_10,
	PAD_GPIO_AD_B0_11,
	PAD_GPIO_AD_B0_12,
	PAD_GPIO_AD_B0_13,
	PAD_GPIO_AD_B0_14,
	PAD_GPIO_AD_B0_15,
	PAD_GPIO_AD_B1_00,
	PAD_GPIO_AD_B1_01,
	PAD_GPIO_AD_B1_02,
	PAD_GPIO_AD_B1_03,
	PAD_GPIO_AD_B1_04,
	PAD_GPIO_AD_B1_05,
	PAD_GPIO_AD_B1_06,
	PAD_GPIO_AD_B1_07,
	PAD_GPIO_AD_B1_08,
	PAD_GPIO_AD_B1_09,
	PAD_GPIO_AD_B1_10,
	PAD_GPIO_AD_B1_11,
	PAD_GPIO_AD_B1_12,
	PAD_GPIO_AD_B1_13,
	PAD_GPIO_AD_B1_14,
	PAD_GPIO_AD_B1_15,
	PAD_GPIO_B0_00,
	PAD_GPIO_B0_01,
	PAD_GPIO_B0_02,
	PAD_GPIO_B0_03,
	PAD_GPIO_B0_04,
	PAD_GPIO_B0_05,
	PAD_GPIO_B0_06,
	PAD_GPIO_B0_07,
	PAD_GPIO_B0_08,
	PAD_GPIO_B0_09,
	PAD_GPIO_B0_10,
	PAD_GPIO_B0_11,
	PAD_GPIO_B0_12,
	PAD_GPIO_B0_13,
	PAD_GPIO_B0_14,
	PAD_GPIO_B0_15,
	PAD_GPIO_B1_00,
	PAD_GPIO_B1_01,
	PAD_GPIO_B1_02,
	PAD_GPIO_B1_03,
	PAD_GPIO_B1_04,
	PAD_GPIO_B1_05,
	PAD_GPIO_B1_06,
	PAD_GPIO_B1_07,
	PAD_GPIO_B1_08,
	PAD_GPIO_B1_09,
	PAD_GPIO_B1_10,
	PAD_GPIO_B1_11,
	PAD_GPIO_B1_12,
	PAD_GPIO_B1_13,
	PAD_GPIO_B1_14,
	PAD_GPIO_B1_15,
	PAD_GPIO_SD_B0_00,
	PAD_GPIO_SD_B0_01,
	PAD_GPIO_SD_B0_02,
	PAD_GPIO_SD_B0_03,
	PAD_GPIO_SD_B0_04,
	PAD_GPIO_SD_B0_05,
	PAD_GPIO_SD_B1_00,
	PAD_GPIO_SD_B1_01,
	PAD_GPIO_SD_B1_02,
	PAD_GPIO_SD_B1_03,
	PAD_GPIO_SD_B1_04,
	PAD_GPIO_SD_B1_05,
	PAD_GPIO_SD_B1_06,
	PAD_GPIO_SD_B1_07,
	PAD_GPIO_SD_B1_08,
	PAD_GPIO_SD_B1_09,
	PAD_GPIO_SD_B1_10,
	PAD_GPIO_SD_B1_11,

	/*
	 * Control registers in IOMUXC_SNVS.
	 */
	PAD_TEST_MODE,
	PAD_POR_B,
	PAD_ONOFF,
	PAD_WAKEUP,
	PAD_PMIC_ON_REQ,
	PAD_PMIC_STBY_REQ,

	/*
	 * No control registers.
	 */
	PAD_CCM_CLK1_N,
	PAD_CCM_CLK1_P,
	PAD_RTC_XTALI,
	PAD_RTC_XTALO,
	PAD_USB_OTG1_CHD_B,
	PAD_USB_OTG1_DN,
	PAD_USB_OTG1_DP,
	PAD_USB_OTG1_VBUS,
	PAD_USB_OTG2_DN,
	PAD_USB_OTG2_DP,
	PAD_USB_OTG2_VBUS,
	PAD_XTALI,
	PAD_XTALO,
};
static_assert(PAD_GPIO_SD_B1_11 == 123);
